package br.edu.ifrn.utineo.jdbc;

import java.sql.Connection;
import java.sql.Date;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import br.edu.ifrn.utineo.modelo.Medicamentos;
import br.edu.ifrn.utineo.modelo.Funcionario;
import br.edu.ifrn.utineo.modelo.Pacientes;
import br.edu.ifrn.utineo.modelo.Prescricao;
import br.edu.ifrn.utineo.modelo.Sistema;
import java.sql.ResultSet;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.List;

public class Conexao {
	
	//Attribute
	private Connection connection = null;
	
	
	//Constructor
	public Conexao() throws SQLException {
		this.connection = ConnectionFactory.getConnection();
	}
	
	//Methods
	
	public void adiciona(Medicamentos medicamento) throws SQLException{
		
		//prepared statement para inser��o
		String sql = "insert into medicamento(CodMedicamento,NomeMedicamento) values (?,?)";
		PreparedStatement stmt = connection.prepareStatement(sql);
		
		//seta valores
		
		stmt.setInt(1, medicamento.getCodMedicamento());
		stmt.setString(2, medicamento.getNomeMedicamento());
		
		//executa comandos
		
		stmt.execute();
		stmt.close();
	}
	
	public void adiciona(Funcionario medico) throws SQLException{
		
		//prepared statement para inser��o
		String sql = "insert into funcionario (ID,Nome,Senha,CodTipoFunc) values (?,?,?,?)";
		PreparedStatement stmt = connection.prepareStatement(sql);
		
		//seta valores
		
		stmt.setInt(1, medico.getID());
		stmt.setString(2, medico.getNome());
		stmt.setString(3, medico.getSenha());
        stmt.setInt(4, medico.getCodigoFuncionario());
		
		//executa comandos
		
		stmt.execute();
		stmt.close();
	}
	
	public void adiciona(Prescricao prescricao) throws SQLException{

		//prepared statement para inser��o
		String sql = "insert into prescricao (Medicamento,ID,Dose,Prescrito,Data,Quantidade,Evolucao,Registro,Aplicado,Cancelado) values (?,?,?,?,?,?,?,?,?,?)";
		PreparedStatement stmtInsert = connection.prepareStatement(sql);
		
		//seta valores
		
		stmtInsert.setString(1, prescricao.getMedicamento());
		stmtInsert.setInt(2, prescricao.getCRM());
		stmtInsert.setString(3, prescricao.getDose());
		stmtInsert.setString(4, prescricao.getPrescrito());
		stmtInsert.setDate(5,(java.sql.Date) prescricao.getData());
		stmtInsert.setFloat(6, prescricao.getQuantidade());
		stmtInsert.setString(7, prescricao.getEvolucao());
                stmtInsert.setInt(8, prescricao.getRegistro());
                stmtInsert.setBoolean(9, false);
                stmtInsert.setBoolean(10, false);
		
		//executa comandos
		
		stmtInsert.execute();
		stmtInsert.close();
	}
	
	public void adiciona(Pacientes paciente) throws SQLException{
		
		//prepared statement para inser��o
		String sql = "insert into paciente (Registro,NomeMae,Sexo,NumLeito,DataNascimento,DataInternacao,PesoAlta,PesoNascimento,ID) values (?,?,?,?,?,?,?,?,?)";
		PreparedStatement stmt = connection.prepareStatement(sql);
		
		//seta valores
		
		stmt.setInt(1, paciente.getRegistro());
		stmt.setString(2, paciente.getNomeMae());
		stmt.setString(3, paciente.getSexo());
		stmt.setInt(4, paciente.getLeito());
		stmt.setDate(5, (Date) paciente.getDataNascimento());
		stmt.setDate(6, (Date) paciente.getDataInternacao());
		stmt.setFloat(7, paciente.getPesoAlta());
		stmt.setFloat(8, paciente.getPesoNascimento());
        stmt.setInt(9, paciente.getCRM());
		
		//executa comandos
		
		stmt.execute();
		stmt.close();
	}

     public Pacientes LocalizarPacientes(int reg) throws SQLException{
         Sistema sis = Sistema.getInstance();
         Pacientes p = new Pacientes();

         String sql = "SELECT * from paciente WHERE Registro='" + reg + "'";
                Statement stmt = connection.createStatement();
                ResultSet rs = stmt.executeQuery(sql);
                int index =-1;

                while(rs.next()){
                 index = rs.getInt("Registro");
                 p.setCRM(rs.getInt("ID"));
                 p.setDataInternacao(rs.getDate("DataInternacao"));
                 p.setDataNascimento(rs.getDate("DataInternacao"));
                 p.setLeito(rs.getInt("NumLeito"));
                 p.setNomeMae(rs.getString("NomeMae"));
                 p.setPesoAlta(rs.getFloat("PesoAlta"));
                 p.setPesoNascimento(rs.getFloat("PesoNascimento"));
                 p.setRegistro(index);
                 p.setSexo(rs.getString("Sexo"));

                 sis.setPaciente(index, p);

                }


         return  p;
     }
     public int obterIndexFunc(String usuario, String senha) throws SQLException{
                String sql = "SELECT Nome,ID FROM funcionario WHERE Nome='" + usuario + "' AND Senha='" + senha + "'";
                Statement stmt = connection.createStatement();
                ResultSet rs = stmt.executeQuery(sql);
                int index =-1;

                while(rs.next()){
                 index = rs.getInt("ID");
                }

         return index;

     }

      public int obterIndexPac(String usuario, String senha) throws SQLException{
                String sql = "SELECT Nome,Registro FROM paciente WHERE Nome='" + usuario + "' AND Senha='" + senha + "'";
                Statement stmt = connection.createStatement();
                ResultSet rs = stmt.executeQuery(sql);
                int index =-1;

                while(rs.next()){
                 index = rs.getInt("Registro");
                }

         return index;

      }
     public void login(String usuario,String senha) throws SQLException{
                String sql = "SELECT Nome,Senha,CodTipoFunc,ID FROM funcionario WHERE Nome='" + usuario + "' AND Senha='" + senha + "'";
                Statement stmt = connection.createStatement();
                Sistema sis = Sistema.getInstance();
                ResultSet rs = stmt.executeQuery(sql);
                Funcionario med = new Funcionario();
                while(rs.next()){
                    int index = rs.getInt("ID");
                    med.setNome(rs.getString("Nome"));
                    med.setSenha(rs.getString("Senha"));
                    med.setCodigoFuncionario(rs.getInt("CodTipoFunc"));
                    med.setID(rs.getInt("ID"));
                   
                    sis.setFuncionario(index, med);
                }
                stmt.close();
        }

     public boolean verificarUsuario(String nome,String senha) throws SQLException{
            String sql = "SELECT Nome,Senha FROM funcionario WHERE Nome=? AND Senha=?";
            PreparedStatement stmt = connection.prepareStatement(sql);
            stmt.setString(1,nome);
            stmt.setString(2, senha);
            boolean resultado = stmt.execute();
            stmt.close();
            if(resultado)
                return true;
            else
                return false;
        }

        public void AtualizarDadosUsuario(String novaSenha, String nome,String senha) throws SQLException{
            String sql = "UPDATE funcionario SET Senha=? WHERE Nome=? AND Senha=?";
            PreparedStatement stmt = connection.prepareStatement(sql);
            
            stmt.setString(1,novaSenha);
            stmt.setString(2,nome);
            stmt.setString(3,senha);
            stmt.execute();
            stmt.close();
        }

        public void ExcluirUsuario(int id) throws SQLException{
            String sql = "DELETE FROM funcionario WHERE ID=?";
            PreparedStatement stmt = connection.prepareStatement(sql);
            stmt.setInt(1,id);
            stmt.execute();
            stmt.close();
        }

        public List recuperarTodos() throws SQLException{
            Statement stmt = connection.createStatement();
            List<Funcionario> medicos = new ArrayList<Funcionario>();
            String sql = "SELECT Nome,Senha,CodTipoFunc,ID FROM funcionario ORDER BY CodTipoFunc";
            ResultSet rs = stmt.executeQuery(sql);

            while(rs.next()){
                Funcionario med = new Funcionario();
                med.setNome(rs.getString("Nome"));
                med.setSenha(rs.getString("Senha"));
                med.setCodigoFuncionario(rs.getInt("CodTipoFunc"));
                med.setID(rs.getInt("ID"));
                medicos.add(med);
            }
            return medicos;
        }

        public List listarPacientes() throws SQLException{
            String sql = "SELECT Registro,NomeMae,NumLeito FROM paciente";
            Statement stmt = connection.createStatement();
            List<Pacientes> paciente = new ArrayList<Pacientes>();
            ResultSet rs = stmt.executeQuery(sql);

            while(rs.next()){
                Pacientes pac = new Pacientes();
                pac.setRegistro(rs.getInt("Registro"));
                pac.setNomeMae(rs.getString("NomeMae"));
                pac.setLeito(rs.getInt("NumLeito"));
                paciente.add(pac);
            }

            return paciente;
        }

        public List ImprimirPrescricao(int registro) throws SQLException{
            String sql = "SELECT pa.NumLeito,pa.NomeMae,pe.Quantidade, pe.Medicamento FROM paciente pa, prescricao pe WHERE pa.Registro=" + registro + "AND pe.Registro=" + registro + ";";
            Statement stmt = connection.createStatement();
            ResultSet rs = stmt.executeQuery(sql);
            ArrayList<String> prescricao = new ArrayList<String>();

            while(rs.next()){
                prescricao.add(rs.getString("NumLeito"));
                prescricao.add(rs.getString("NomeMae"));
                prescricao.add(rs.getString("Quantidade"));
                prescricao.add(rs.getString("Medicamento"));
            }

            return prescricao;
        }


}
